home *** CD-ROM | disk | FTP | other *** search
- ⓪ MODULE GetMPB;⓪ (*$E MOS *)⓪ ⓪ FROM MOSCtrl IMPORT ProcessID;⓪ FROM SYSTEM IMPORT ASSEMBLER, ADDRESS, LONGWORD;⓪ FROM Console IMPORT WriteString, WriteLn, Read;⓪ FROM StrConv IMPORT LHexToStr;⓪ ⓪ TYPE P_MD = POINTER TO MD;⓪%⓪%MD = RECORD⓪,next: P_MD;⓪,start: ADDRESS;⓪,length: LONGCARD;⓪,owner: LONGWORD⓪*END;⓪ ⓪%P_MPB = POINTER TO MPB;⓪%⓪%MPB = RECORD⓪-free: P_MD;⓪-used: P_MD;⓪-boomer: P_MD⓪+END;⓪ ⓪ ⓪ VAR MPBPtr: P_MPB;⓪ ⓪$ch: CHAR;⓪ ⓪ CONST end_os = $4FA;⓪ ⓪ BEGIN⓪"ASSEMBLER⓪(; Malloc (2)⓪(MOVEQ #2,D0⓪(MOVE.L D0,-(A7)⓪(MOVE #$48,-(A7)⓪(TRAP #1⓪(ADDQ.L #6,A7⓪(MOVE.L D0,-(A7)⓪(⓪(CLR.L -(A7)⓪(MOVE #$20,-(A7) ; Super (0)⓪(TRAP #1⓪(MOVE.L D0,2(A7)⓪(⓪(MOVE.L $4F2,A0 ; ^TOS-Header⓪(MOVE.L 8(A0),A0 ; wg. altem AHDI⓪(CMPI.B #$03,2(A0)⓪(BEQ.W error ; erstmal nicht bei TT wg. Fast-RAM⓪(⓪(LEA $800,A0⓪(MOVE.L end_os,D1⓪(SUB.L A0,D1⓪(LSR #1,D1 ; D1: Anzahl zu suchender Words⓪(⓪(; *** nach dem MD suchen ***⓪(⓪(MOVE.L 6(A7),D0 ; zu suchender 'start'⓪(MOVE.L ProcessID,A2⓪(MOVE.L (A2),D2 ; zu suchender 'owner'⓪(⓪(CLR.L -(A7) ; Flag: bisher nix gefunden⓪(⓪$l1: CMP.W (A0)+,D0⓪(DBEQ D1,l1⓪(BNE e1⓪(CMP.L -4(A0),D0 ; stimmt 'start'?⓪(DBEQ D1,l1⓪(BNE e1⓪(CMPI.L #2,(A0) ; stimmt 'length'?⓪(DBEQ D1,l1⓪(BNE e1⓪(CMP.L 4(A0),D2 ; stimmt 'owner'?⓪(DBEQ D1,l1⓪(BNE e1⓪(⓪(; *** MD gefunden ***⓪(⓪(TST.L (A7)+⓪(BNE error ; mehrfach gefunden -> Abbruch⓪(⓪(LEA -8(A0),A1⓪(MOVE.L A1,-(A7) ; Adr. des MD merken⓪(⓪(DBRA D1,l1 ; weitersuchen⓪ ⓪$e1: MOVE.L (A7)+,A1⓪(MOVE.L A1,D2⓪(BEQ error ; nicht gefunden⓪(⓪(; *** nach möglichen MPBs suchen ***⓪(⓪(LEA $800,A0⓪(MOVE.L end_os,D1⓪(SUB.L A0,D1⓪(LSR #1,D1 ; D1: Anzahl zu suchender Words⓪(⓪(CLR.L -(A7) ; Endmarke f. gefundene Adressen⓪(⓪$l2: CMP.W (A0)+,D2⓪(DBEQ D1,l2⓪(BNE e2⓪(CMP.L -4(A0),D2 ; steht ^MD in MPB.used?⓪(DBEQ D1,l2⓪(BNE e2⓪(; einen haben wir...⓪(PEA -8(A0)⓪(DBRA D1,l2 ; weitersuchen⓪(⓪$e2: ⓪(; *** Bereich wieder freigeben. Dann ***⓪(; *** steht in MPB.used der ^MD.next ***⓪(⓪(MOVE.L (A1),-(A7) ; MD.next merken⓪(MOVE.L D0,-(A7)⓪(MOVE #$49,-(A7) ; Mfree()⓪(TRAP #1⓪(ADDQ.L #6,A7⓪(MOVE.L (A7)+,D2 ; MD.next⓪(⓪(; *** nochmal die mögl. MPBs prüfen ***⓪(⓪$l3: MOVE.L (A7)+,D0 ; ^MD⓪(BEQ e3⓪(MOVE.L D0,A0⓪(CMP.L 4(A0),D2 ; MBP.used = MD.next?⓪(BNE l3⓪(TST.L MPBPtr⓪(BNE err2 ; mehrfach gefunden -> Abbruch⓪(; *** MPB gefunden ***⓪(MOVE.L A0,MPBPtr⓪(BRA l3 ; weitersuchen⓪(⓪"err2: TST.L (A7)+⓪(BNE err2⓪(CLR.L MPBPtr⓪ ⓪$e3: TRAP #1 ; Super (SSP)⓪(ADDQ.L #6,A7⓪(BRA ende⓪(⓪!error: TRAP #1 ; Super (SSP)⓪(ADDQ.L #6,A7⓪(MOVE #$49,-(A7) ; Mfree()⓪(TRAP #1⓪(ADDQ.L #2,A7⓪(CLR.L MPBPtr⓪ ⓪"ende: ADDQ.L #4,A7 ; Adr. vom angeforderten Block vom Stack⓪"END;⓪"WriteString ('MPBPtr: ');⓪"WriteString (LHexToStr (MPBPtr, 7));⓪"WriteLn;⓪"Read (ch)⓪ END GetMPB.⓪ ə
- (* $FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54$FFED5C54Ç$000001ADT.......T.......T.......T.......T.......T.......T.......T.......T.......T.......$0000089F$0000075B$0000076B$0000077B$0000078A$0000080A$0000085A$0000089F$000006DD$000007FD$0000082E$00000884$00000A86$000001AD$000001F0$00000380ÇÇé*)
-